{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-27T13:30:25.830973Z",
     "start_time": "2025-01-27T13:30:20.200697Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 1.26.4\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.1\n",
      "torch 2.5.1+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dataset\n",
    "\n",
    "实际上我们从chapter_2 开始就在使用该模块"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-27T13:30:36.560861Z",
     "start_time": "2025-01-27T13:30:36.553153Z"
    }
   },
   "source": [
    "from torch.utils.data import Dataset\n",
    "\n",
    "class RandomDataset(Dataset):\n",
    "    def __init__(self, labels):\n",
    "        self.labels = labels\n",
    "        \n",
    "    def __getitem__(self, index):\n",
    "        data = torch.mul(torch.randn(2), 0.1) + self.labels[index] # 生成两个服从标准正态分布的随机数（两个维度），然后乘以0.1，再加上label\n",
    "        label = self.labels[index]\n",
    "        return data, label # 返回的是一个元组,这里返回的数据格式决定我们遍历这个数据集时，每次迭代返回的数据格式\n",
    "    \n",
    "    def __len__(self):\n",
    "        return len(self.labels)\n",
    "    \n",
    "#np.random.randint(2, size=1000)生成了一个长度为1000的随机标签数组，每个元素都是0或1\n",
    "rd = RandomDataset(np.random.randint(2, size=1000))\n",
    "print(\"数据集的长度：\", len(rd))\n",
    "for x, y in rd:\n",
    "    print(x, y)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据集的长度： 1000\n",
      "tensor([ 0.0402, -0.0178]) 0\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-26T12:41:02.920273Z",
     "start_time": "2025-01-26T12:41:02.733325Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 可视化随机数据集\n",
    "xx = []\n",
    "yy = []\n",
    "labels = []\n",
    "\n",
    "for (x, y), label in rd:\n",
    "    xx.append(x)\n",
    "    yy.append(y)\n",
    "    labels.append(label)\n",
    "\n",
    "    \n",
    "plt.scatter(xx, yy, s=10, c=labels) # s是点的大小，c是颜色\n",
    "plt.colorbar()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 6
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-19T08:11:18.763467Z",
     "start_time": "2024-07-19T08:11:18.753493Z"
    }
   },
   "source": [
    "## DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-26T12:39:56.619600Z",
     "start_time": "2025-01-26T12:39:56.613526Z"
    }
   },
   "source": [
    "from torch.utils.data import DataLoader\n",
    "\n",
    "ld = DataLoader(rd, batch_size=8, shuffle=True) # batch_size是每次迭代返回的数据个数，shuffle是是否打乱数据集\n",
    "for data, label in ld:\n",
    "    print(data)\n",
    "    print(label)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[ 0.0917,  0.0330],\n",
      "        [ 0.0521,  0.0790],\n",
      "        [ 0.0785,  0.1780],\n",
      "        [ 0.9705,  0.9262],\n",
      "        [-0.1031,  0.1550],\n",
      "        [-0.0637, -0.0666],\n",
      "        [ 0.8643,  1.0104],\n",
      "        [-0.1668, -0.1183]])\n",
      "tensor([0, 0, 0, 1, 0, 0, 1, 0], dtype=torch.int32)\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## tfrecord\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-19T08:13:01.285506800Z",
     "start_time": "2024-07-19T08:13:01.277636200Z"
    }
   },
   "source": [
    "复现论文的时候更多地发现使用 pyarrow 而不是 tfrecord\n",
    "\n",
    "如果想在pytorch里使用tfrecord，可以参考 https://github.com/vahidk/tfrecord"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
